home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / CIncludes / SoundComponents.h < prev    next >
C/C++ Source or Header  |  1996-05-01  |  18KB  |  462 lines

  1. /*
  2.      File:        SoundComponents.h
  3.  
  4.      Contains:    Sound Components Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __SOUNDCOMPONENTS__
  19. #define __SOUNDCOMPONENTS__
  20.  
  21. #ifndef __TYPES__
  22. #include <Types.h>
  23. #endif
  24. #ifndef __COMPONENTS__
  25. #include <Components.h>
  26. #endif
  27. #ifndef __SOUND__
  28. #include <Sound.h>
  29. #endif
  30.  
  31. #ifdef __cplusplus
  32. extern "C" {
  33. #endif
  34.  
  35. #if PRAGMA_IMPORT_SUPPORTED
  36. #pragma import on
  37. #endif
  38.  
  39. #if PRAGMA_ALIGN_SUPPORTED
  40. #pragma options align=mac68k
  41. #endif
  42.  
  43. /*
  44.                         * * *  N O T E  * * *
  45.  
  46.     This file has been updated to include Sound Manager 3.1 interfaces.
  47.  
  48.     Some of the Sound Manager 3.0 interfaces were not put into the InterfaceLib
  49.     that originally shipped with the PowerMacs. These missing functions and the
  50.     new 3.1 interfaces have been released in the SoundLib library for PowerPC
  51.     developers to link with. The runtime library for these functions are
  52.     installed by Sound Manager 3.1. The following functions are found in SoundLib.
  53.  
  54.         AudioGetBass, AudioGetInfo, AudioGetMute, AudioGetOutputDevice,
  55.         AudioGetTreble, AudioGetVolume, AudioMuteOnEvent, AudioSetBass,
  56.         AudioSetMute, AudioSetToDefaults, AudioSetTreble, AudioSetVolume,
  57.         OpenMixerSoundComponent, CloseMixerSoundComponent, SoundComponentAddSource,
  58.         SoundComponentGetInfo, SoundComponentGetSource, SoundComponentGetSourceData,
  59.         SoundComponentInitOutputDevice, SoundComponentPauseSource,
  60.         SoundComponentPlaySourceBuffer, SoundComponentRemoveSource,
  61.         SoundComponentSetInfo, SoundComponentSetOutput, SoundComponentSetSource,
  62.         SoundComponentStartSource, SoundComponentStopSource
  63. */
  64.  
  65.  
  66. /*
  67. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  68.  constants
  69. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  70. sound component types and subtypes
  71. */
  72.  
  73. enum {
  74.     kNoSoundComponentType        = '****',
  75.     kSoundComponentType            = 'sift',                        /*component type*/
  76.     kSoundComponentPPCType        = 'nift',                        /*component type for PowerPC code*/
  77.     kRate8SubType                = 'ratb',                        /*8-bit rate converter*/
  78.     kRate16SubType                = 'ratw',                        /*16-bit rate converter*/
  79.     kConverterSubType            = 'conv',                        /*sample format converter*/
  80.     kSndSourceSubType            = 'sour',                        /*generic source component*/
  81.     kMixerType                    = 'mixr',
  82.     kMixer8SubType                = 'mixb',                        /*8-bit mixer*/
  83.     kMixer16SubType                = 'mixw',                        /*16-bit mixer*/
  84.     kSoundOutputDeviceType        = 'sdev',                        /*sound output component*/
  85.     kClassicSubType                = 'clas',                        /*classic hardware, i.e. Mac Plus*/
  86.     kASCSubType                    = 'asc ',                        /*Apple Sound Chip device*/
  87.     kDSPSubType                    = 'dsp ',                        /*DSP device*/
  88.     kAwacsSubType                = 'awac',                        /*Another of Will's Audio Chips device*/
  89.     kGCAwacsSubType                = 'awgc',                        /*Awacs audio with Grand Central DMA*/
  90.     kSingerSubType                = 'sing',                        /*Singer (via Whitney) based sound*/
  91.     kSinger2SubType                = 'sng2',                        /*Singer 2 (via Whitney) for Acme*/
  92.     kWhitSubType                = 'whit',                        /*Whit sound component for PrimeTime 3*/
  93.     kSoundBlasterSubType        = 'sbls',                        /*Sound Blaster for CHRP*/
  94.     kSoundCompressor            = 'scom',
  95.     kSoundDecompressor            = 'sdec',
  96.     kMace3SubType                = 'MAC3',                        /*MACE 3:1*/
  97.     kMace6SubType                = 'MAC6',                        /*MACE 6:1*/
  98.     kCDXA4SubType                = 'cdx4',                        /*CD/XA 4:1*/
  99.     kCDXA2SubType                = 'cdx2',                        /*CD/XA 2:1*/
  100.     kIMA4SubType                = 'ima4',                        /*IMA 4:1*/
  101.     kULawSubType                = 'ulaw',                        /*µLaw 2:1*/
  102.     kLittleEndianSubType        = 'sowt',                        /*Little-endian*/
  103.     kAudioComponentType            = 'adio',                        /*Audio components and sub-types*/
  104.     kAwacsPhoneSubType            = 'hphn',
  105.     kAudioVisionSpeakerSubType    = 'telc',
  106.     kAudioVisionHeadphoneSubType = 'telh',
  107.     kPhilipsFaderSubType        = 'tvav'
  108. };
  109.  
  110. /*sound component set/get info selectors*/
  111.  
  112. enum {
  113.     siVolume                    = 'volu',
  114.     siHardwareVolume            = 'hvol',
  115.     siSpeakerVolume                = 'svol',
  116.     siHeadphoneVolume            = 'pvol',
  117.     siHardwareVolumeSteps        = 'hstp',
  118.     siHeadphoneVolumeSteps        = 'hdst',
  119.     siHardwareMute                = 'hmut',
  120.     siSpeakerMute                = 'smut',
  121.     siHeadphoneMute                = 'pmut',
  122.     siRateMultiplier            = 'rmul',
  123.     siQuality                    = 'qual',
  124.     siWideStereo                = 'wide',
  125.     siHardwareFormat            = 'hwfm',
  126.     siPreMixerSoundComponent    = 'prmx',
  127.     siPostMixerSoundComponent    = 'psmx',
  128.     kOffsetBinary                = 'raw ',                        /*format types*/
  129.     kTwosComplement                = 'twos',
  130.     kMACE3Compression            = 'MAC3',
  131.     kMACE6Compression            = 'MAC6'
  132. };
  133.  
  134. /*features flags*/
  135.  
  136. enum {
  137.     k8BitRawIn                    = (1 << 0),                        /*data description*/
  138.     k8BitTwosIn                    = (1 << 1),
  139.     k16BitIn                    = (1 << 2),
  140.     kStereoIn                    = (1 << 3),
  141.     k8BitRawOut                    = (1 << 8),
  142.     k8BitTwosOut                = (1 << 9),
  143.     k16BitOut                    = (1 << 10),
  144.     kStereoOut                    = (1 << 11),
  145.     kReverse                    = (1L << 16),                    /*  function description*/
  146.     kRateConvert                = (1L << 17),
  147.     kCreateSoundSource            = (1L << 18),
  148.     kHighQuality                = (1L << 22),                    /*  performance description*/
  149.     kNonRealTime                = (1L << 23)
  150. };
  151.  
  152. #if FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED
  153. /*SoundComponentPlaySourceBuffer action flags*/
  154.  
  155. enum {
  156.     kSourcePaused                = (1 << 0),
  157.     kPassThrough                = (1L << 16),
  158.     kNoSoundComponentChain        = (1L << 17)
  159. };
  160.  
  161. /*flags for OpenMixerSoundComponent*/
  162.  
  163. enum {
  164.     kNoMixing                    = (1 << 0),                        /*don't mix source*/
  165.     kNoSampleRateConversion        = (1 << 1),                        /*don't convert sample rate (i.e. 11 kHz -> 22 kHz)*/
  166.     kNoSampleSizeConversion        = (1 << 2),                        /*don't convert sample size (i.e. 16 -> 8)*/
  167.     kNoSampleFormatConversion    = (1 << 3),                        /*don't convert sample format (i.e. 'twos' -> 'raw ')*/
  168.     kNoChannelConversion        = (1 << 4),                        /*don't convert stereo/mono*/
  169.     kNoDecompression            = (1 << 5),                        /*don't decompress (i.e. 'MAC3' -> 'raw ')*/
  170.     kNoVolumeConversion            = (1 << 6),                        /*don't apply volume*/
  171.     kNoRealtimeProcessing        = (1 << 7)                        /*won't run at interrupt time*/
  172. };
  173.  
  174. /*SoundParamBlock quality flags*/
  175.  
  176. enum {
  177.     kBestQuality                = (1 << 0)                        /*use interpolation in rate conversion*/
  178. };
  179.  
  180. /*useful bit masks*/
  181.  
  182. enum {
  183.     kInputMask                    = 0x000000FF,                    /*masks off input bits*/
  184.     kOutputMask                    = 0x0000FF00,                    /*masks off output bits*/
  185.     kOutputShift                = 8,                            /*amount output bits are shifted*/
  186.     kActionMask                    = 0x00FF0000,                    /*masks off action bits*/
  187.     kSoundComponentBits            = 0x00FFFFFF
  188. };
  189.  
  190. /*Audio Component constants*/
  191.  
  192. enum {
  193.                                                                 /*Values for whichChannel parameter*/
  194.     audioAllChannels            = 0,                            /*All channels (usually interpreted as both left and right)*/
  195.     audioLeftChannel            = 1,                            /*Left channel*/
  196.     audioRightChannel            = 2,                            /*Right channel*/
  197.                                                                 /*Values for mute parameter*/
  198.     audioUnmuted                = 0,                            /*Device is unmuted*/
  199.     audioMuted                    = 1,                            /*Device is muted*/
  200.                                                                 /*Capabilities flags definitions*/
  201.     audioDoesMono                = (1L << 0),                    /*Device supports mono output*/
  202.     audioDoesStereo                = (1L << 1),                    /*Device supports stereo output*/
  203.     audioDoesIndependentChannels = (1L << 2)                    /*Device supports independent software control of each channel*/
  204. };
  205.  
  206. /*
  207. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  208.  typedefs
  209. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  210. */
  211. /*
  212. ShortFixed consists of an 8 bit, 2's complement integer part in the high byte,
  213. with an 8 bit fractional part in the low byte; its range is -128 to 127.99609375
  214. */
  215. typedef short ShortFixed;
  216. typedef struct SoundParamBlock SoundParamBlock;
  217. typedef SoundParamBlock *SoundParamBlockPtr;
  218. typedef pascal Boolean (*SoundParamProcPtr)(SoundParamBlockPtr *pb);
  219.  
  220. #if GENERATINGCFM
  221. typedef UniversalProcPtr SoundParamUPP;
  222. #else
  223. typedef SoundParamProcPtr SoundParamUPP;
  224. #endif
  225. struct SoundParamBlock {
  226.     long                             recordSize;                    /*size of this record in bytes*/
  227.     SoundComponentData                 desc;                        /*description of sound buffer*/
  228.     UnsignedFixed                     rateMultiplier;                /*rate multiplier to apply to sound*/
  229.     short                             leftVolume;                    /*volumes to apply to sound*/
  230.     short                             rightVolume;
  231.     long                             quality;                    /*quality to apply to sound*/
  232.     ComponentInstance                 filter;                        /*filter to apply to sound*/
  233.     SoundParamUPP                     moreRtn;                    /*routine to call to get more data*/
  234.     SoundParamUPP                     completionRtn;                /*routine to call when buffer is complete*/
  235.     long                             refCon;                        /*user refcon*/
  236.     short                             result;                        /*result*/
  237. };
  238.  
  239. /*private thing to reference a Sound Source*/
  240. typedef struct OpaqueSoundSource* SoundSource;
  241. typedef SoundSource *SoundSourcePtr;
  242. struct SoundComponentLink {
  243.     ComponentDescription             description;                /*Describes the sound component*/
  244.     SoundSource                     mixerID;                    /*Reserved by Apple*/
  245.     SoundSource *                    linkID;                        /*Reserved by Apple*/
  246. };
  247. typedef struct SoundComponentLink SoundComponentLink;
  248.  
  249. typedef SoundComponentLink *SoundComponentLinkPtr;
  250. struct AudioInfo {
  251.     long                             capabilitiesFlags;            /*Describes device capabilities*/
  252.     long                             reserved;                    /*Reserved by Apple*/
  253.     unsigned short                     numVolumeSteps;                /*Number of significant increments between min and max volume*/
  254. };
  255. typedef struct AudioInfo AudioInfo;
  256.  
  257. typedef AudioInfo *AudioInfoPtr;
  258. /*
  259. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  260.  functions for sound components
  261. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  262. Sound Component dispatch selectors
  263. */
  264.  
  265. enum {
  266.     kSoundComponentInitOutputDeviceSelect = 1,                    /*these calls cannot be delegated*/
  267.     kSoundComponentSetSourceSelect = 2,
  268.     kSoundComponentGetSourceSelect = 3,
  269.     kSoundComponentGetSourceDataSelect = 4,
  270.     kSoundComponentSetOutputSelect = 5,
  271.     kDelegatedSoundComponentSelectors = 0x0100,                    /*first selector that can be delegated up the chain*/
  272.                                                                 /*these calls can be delegated and have own range*/
  273.     kSoundComponentAddSourceSelect = kDelegatedSoundComponentSelectors + 1,
  274.     kSoundComponentRemoveSourceSelect = kDelegatedSoundComponentSelectors + 2,
  275.     kSoundComponentGetInfoSelect = kDelegatedSoundComponentSelectors + 3,
  276.     kSoundComponentSetInfoSelect = kDelegatedSoundComponentSelectors + 4,
  277.     kSoundComponentStartSourceSelect = kDelegatedSoundComponentSelectors + 5,
  278.     kSoundComponentStopSourceSelect = kDelegatedSoundComponentSelectors + 6,
  279.     kSoundComponentPauseSourceSelect = kDelegatedSoundComponentSelectors + 7,
  280.     kSoundComponentPlaySourceBufferSelect = kDelegatedSoundComponentSelectors + 8
  281. };
  282.  
  283.  
  284. enum {
  285.                                                                 /*Audio Component selectors*/
  286.     kAudioGetVolumeSelect        = 0,
  287.     kAudioSetVolumeSelect        = 1,
  288.     kAudioGetMuteSelect            = 2,
  289.     kAudioSetMuteSelect            = 3,
  290.     kAudioSetToDefaultsSelect    = 4,
  291.     kAudioGetInfoSelect            = 5,
  292.     kAudioGetBassSelect            = 6,
  293.     kAudioSetBassSelect            = 7,
  294.     kAudioGetTrebleSelect        = 8,
  295.     kAudioSetTrebleSelect        = 9,
  296.     kAudioGetOutputDeviceSelect    = 10,
  297.     kAudioMuteOnEventSelect        = 129
  298. };
  299.  
  300. /*
  301. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  302.  Sound Manager 3.0 utilities
  303. */
  304. extern pascal OSErr OpenMixerSoundComponent(SoundComponentDataPtr outputDescription, long outputFlags, ComponentInstance *mixerComponent)
  305.  FOURWORDINLINE(0x203C, 0x0614, 0x0018, 0xA800);
  306.  
  307. extern pascal OSErr CloseMixerSoundComponent(ComponentInstance ci)
  308.  FOURWORDINLINE(0x203C, 0x0218, 0x0018, 0xA800);
  309.  
  310. /*
  311. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  312.  basic sound component functions
  313. */
  314. extern pascal ComponentResult SoundComponentInitOutputDevice(ComponentInstance ti, long actions)
  315.  FIVEWORDINLINE(0x2F3C, 0x0004, 0x0001, 0x7000, 0xA82A);
  316.  
  317. extern pascal ComponentResult SoundComponentSetSource(ComponentInstance ti, SoundSource sourceID, ComponentInstance source)
  318.  FIVEWORDINLINE(0x2F3C, 0x0008, 0x0002, 0x7000, 0xA82A);
  319.  
  320. extern pascal ComponentResult SoundComponentGetSource(ComponentInstance ti, SoundSource sourceID, ComponentInstance *source)
  321.  FIVEWORDINLINE(0x2F3C, 0x0008, 0x0003, 0x7000, 0xA82A);
  322.  
  323. extern pascal ComponentResult SoundComponentGetSourceData(ComponentInstance ti, SoundComponentDataPtr *sourceData)
  324.  FIVEWORDINLINE(0x2F3C, 0x0004, 0x0004, 0x7000, 0xA82A);
  325.  
  326. extern pascal ComponentResult SoundComponentSetOutput(ComponentInstance ti, SoundComponentDataPtr requested, SoundComponentDataPtr *actual)
  327.  FIVEWORDINLINE(0x2F3C, 0x0008, 0x0005, 0x7000, 0xA82A);
  328.  
  329. /*
  330. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  331.  junction methods for the mixer, must be called at non-interrupt level
  332. */
  333. extern pascal ComponentResult SoundComponentAddSource(ComponentInstance ti, SoundSource *sourceID)
  334.  FIVEWORDINLINE(0x2F3C, 0x0004, 0x0101, 0x7000, 0xA82A);
  335.  
  336. extern pascal ComponentResult SoundComponentRemoveSource(ComponentInstance ti, SoundSource sourceID)
  337.  FIVEWORDINLINE(0x2F3C, 0x0004, 0x0102, 0x7000, 0xA82A);
  338.  
  339. /*
  340. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  341.  info methods
  342. */
  343. extern pascal ComponentResult SoundComponentGetInfo(ComponentInstance ti, SoundSource sourceID, OSType selector, void *infoPtr)
  344.  FIVEWORDINLINE(0x2F3C, 0x000C, 0x0103, 0x7000, 0xA82A);
  345.  
  346. extern pascal ComponentResult SoundComponentSetInfo(ComponentInstance ti, SoundSource sourceID, OSType selector, void *infoPtr)
  347.  FIVEWORDINLINE(0x2F3C, 0x000C, 0x0104, 0x7000, 0xA82A);
  348.  
  349. /*
  350. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  351.  control methods
  352. */
  353. extern pascal ComponentResult SoundComponentStartSource(ComponentInstance ti, short count, SoundSource *sources)
  354.  FIVEWORDINLINE(0x2F3C, 0x0006, 0x0105, 0x7000, 0xA82A);
  355.  
  356. extern pascal ComponentResult SoundComponentStopSource(ComponentInstance ti, short count, SoundSource *sources)
  357.  FIVEWORDINLINE(0x2F3C, 0x0006, 0x0106, 0x7000, 0xA82A);
  358.  
  359. extern pascal ComponentResult SoundComponentPauseSource(ComponentInstance ti, short count, SoundSource *sources)
  360.  FIVEWORDINLINE(0x2F3C, 0x0006, 0x0107, 0x7000, 0xA82A);
  361.  
  362. extern pascal ComponentResult SoundComponentPlaySourceBuffer(ComponentInstance ti, SoundSource sourceID, SoundParamBlockPtr pb, long actions)
  363.  FIVEWORDINLINE(0x2F3C, 0x000C, 0x0108, 0x7000, 0xA82A);
  364.  
  365. /*
  366. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  367.  interface for Audio Components
  368. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  369. */
  370. /*
  371. Volume is described as a value between 0 and 1, with 0 indicating minimum
  372.   volume and 1 indicating maximum volume; if the device doesn't support
  373.   software control of volume, then a value of unimpErr is returned, indicating
  374.   that these functions are not supported by the device
  375. */
  376. extern pascal ComponentResult AudioGetVolume(ComponentInstance ac, short whichChannel, ShortFixed *volume)
  377.  FIVEWORDINLINE(0x2F3C, 0x0006, 0x0000, 0x7000, 0xA82A);
  378.  
  379. extern pascal ComponentResult AudioSetVolume(ComponentInstance ac, short whichChannel, ShortFixed volume)
  380.  FIVEWORDINLINE(0x2F3C, 0x0004, 0x0001, 0x7000, 0xA82A);
  381.  
  382. /*
  383. If the device doesn't support software control of mute, then a value of unimpErr is
  384. returned, indicating that these functions are not supported by the device.
  385. */
  386. extern pascal ComponentResult AudioGetMute(ComponentInstance ac, short whichChannel, short *mute)
  387.  FIVEWORDINLINE(0x2F3C, 0x0006, 0x0002, 0x7000, 0xA82A);
  388.  
  389. extern pascal ComponentResult AudioSetMute(ComponentInstance ac, short whichChannel, short mute)
  390.  FIVEWORDINLINE(0x2F3C, 0x0004, 0x0003, 0x7000, 0xA82A);
  391.  
  392. /*
  393. AudioSetToDefaults causes the associated device to reset its volume and mute values
  394. (and perhaps other characteristics, e.g. attenuation) to "factory default" settings
  395. */
  396. extern pascal ComponentResult AudioSetToDefaults(ComponentInstance ac)
  397.  FIVEWORDINLINE(0x2F3C, 0x0000, 0x0004, 0x7000, 0xA82A);
  398.  
  399. /*This routine is required; it must be implemented by all audio components*/
  400. extern pascal ComponentResult AudioGetInfo(ComponentInstance ac, AudioInfoPtr info)
  401.  FIVEWORDINLINE(0x2F3C, 0x0004, 0x0005, 0x7000, 0xA82A);
  402.  
  403. extern pascal ComponentResult AudioGetBass(ComponentInstance ac, short whichChannel, short *bass)
  404.  FIVEWORDINLINE(0x2F3C, 0x0006, 0x0006, 0x7000, 0xA82A);
  405.  
  406. extern pascal ComponentResult AudioSetBass(ComponentInstance ac, short whichChannel, short bass)
  407.  FIVEWORDINLINE(0x2F3C, 0x0004, 0x0007, 0x7000, 0xA82A);
  408.  
  409. extern pascal ComponentResult AudioGetTreble(ComponentInstance ac, short whichChannel, short *Treble)
  410.  FIVEWORDINLINE(0x2F3C, 0x0006, 0x0008, 0x7000, 0xA82A);
  411.  
  412. extern pascal ComponentResult AudioSetTreble(ComponentInstance ac, short whichChannel, short Treble)
  413.  FIVEWORDINLINE(0x2F3C, 0x0004, 0x0009, 0x7000, 0xA82A);
  414.  
  415. extern pascal ComponentResult AudioGetOutputDevice(ComponentInstance ac, Component *outputDevice)
  416.  FIVEWORDINLINE(0x2F3C, 0x0004, 0x000A, 0x7000, 0xA82A);
  417.  
  418. /*This is routine is private to the AudioVision component.  It enables the watching of the mute key.*/
  419. extern pascal ComponentResult AudioMuteOnEvent(ComponentInstance ac, short muteOnEvent)
  420.  FIVEWORDINLINE(0x2F3C, 0x0002, 0x0081, 0x7000, 0xA82A);
  421.  
  422.  
  423.  
  424.  
  425. enum {
  426.     uppSoundParamProcInfo = kPascalStackBased
  427.          | RESULT_SIZE(SIZE_CODE(sizeof(Boolean)))
  428.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SoundParamBlockPtr *)))
  429. };
  430.  
  431. #if GENERATINGCFM
  432. #define NewSoundParamProc(userRoutine)        \
  433.         (SoundParamUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSoundParamProcInfo, GetCurrentArchitecture())
  434. #else
  435. #define NewSoundParamProc(userRoutine)        \
  436.         ((SoundParamUPP) (userRoutine))
  437. #endif
  438.  
  439. #if GENERATINGCFM
  440. #define CallSoundParamProc(userRoutine, pb)        \
  441.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSoundParamProcInfo, (pb))
  442. #else
  443. #define CallSoundParamProc(userRoutine, pb)        \
  444.         (*(userRoutine))((pb))
  445. #endif
  446. #endif
  447.  
  448. #if PRAGMA_ALIGN_SUPPORTED
  449. #pragma options align=reset
  450. #endif
  451.  
  452. #if PRAGMA_IMPORT_SUPPORTED
  453. #pragma import off
  454. #endif
  455.  
  456. #ifdef __cplusplus
  457. }
  458. #endif
  459.  
  460. #endif /* __SOUNDCOMPONENTS__ */
  461.  
  462.